/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.unal.ahnmodeler.main;

import co.edu.unal.ahnmodeler.controller.NetworkController;
import co.edu.unal.ahnmodeler.model.Network;
import co.edu.unal.ahnmodeler.view.MainFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
 * Clase principal de la aplicación. Se encarga de iniciar todo el despliegue y ejecución de la aplicación.
 * @author raider
 */
public class App {
    /**
     * Método principal que incia la ejecución de la aplicación.
     * @param args Argumentos que recibe la clase main.
     */
    public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel(
            UIManager.getSystemLookAndFeelClassName());
    } 
    catch (UnsupportedLookAndFeelException | ClassNotFoundException | InstantiationException | IllegalAccessException e) {
        System.err.println(e);
    }
        System.out.println("Clase Main.java");
        netController = NetworkController.getInstance();
        network = Network.getInstance();
        mFrame = MainFrame.getInstance();
        mFrame.setVisible(true);
    }

    /**
     * Permite obtener la instancia del contenedor principal de la aplicación.
     * @return Contenedor principal de la aplicación.
     */
    public static MainFrame getmFrame() {
        return mFrame;
    }

    /**
     * Permite obtener la instancia de la clase que representa la red Ad-Hoc.
     * @return Instancia de la red Ad-Hoc.
     */
    public static Network getNetwork() {
        return network;
    }

    /**
     * Permite obtener la instancia del controlador de la red Ad-Hoc.
     * @return Instancia del controlador de la red Ad-Hoc.
     */
    public static NetworkController getNetController() {
        return netController;
    }

    /**
     * Permite obtener el estado actual de la aplicación.
     * @return Estado actual de la aplicación.
     */
    public static String getStatus() {
        return status;
    }

    /**
     * Permite asignar un nuevo estado a la aplicación.
     * @param status Nuevo estado de la aplicación.
     */
    public static void setStatus(String status) {
        App.status = status;
        mFrame.getsBar().setStatus(status);
    }
    
    private static NetworkController netController;
    private static MainFrame mFrame;
    private static Network network;
    private static String status;
}
